package com.roads.site.service;

import com.roads.common.core.domain.AjaxResult;
import com.roads.site.domain.SiteLabourStaff;
import com.roads.site.domain.SiteLabourStaffRecord;
import com.roads.site.domain.card.CardBackModel;
import com.roads.site.domain.card.CardFrontModel;
import com.roads.site.domain.vo.StaffBasicModel;
import com.roads.site.domain.vo.StaffEnterModel;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * 农民工花名册Service接口
 * 
 * @author nhp
 * @date 2022-10-27
 */
public interface ISiteLabourStaffService {

    /**
     * 根据主键ID查询详情
     * 
     * @param id 农民工花名册主键
     * @return 农民工花名册
     */
    SiteLabourStaff getModelById(Integer id);

    /**
     * 查询列表
     * 
     * @param model 农民工花名册
     * @return 农民工花名册集合
     */
    List<SiteLabourStaff> selectModelList(SiteLabourStaff model);

    /**
     * 根据身份证号查询劳务工
     *
     * @param idNo 身份证号
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModeListByIdNo(String idNo);

    /**
     * 查询所有劳务工信息
     *
     * @return 所有劳务工集合
     */
    List<SiteLabourStaff> selectModelListAll();

    /**
     * 劳务工下拉框
     *
     * @param institutionCode 标段编号
     * @param masterId 工资发放主表ID
     * @return 结果
     */
    List<SiteLabourStaff> dropDownListBySalary(String institutionCode, Integer masterId);

    /**
     * 根据id集合查询劳务工集合
     *
     * @param ids id 集合
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModelListByIds(Integer[] ids);

    /**
     * 根据项目ID/状态查询劳务工数量
     *
     * @param projectId 项目ID
     * @param status 状态
     * @return 数量
     */
    int getStaffCountByProjectId(Integer projectId, String status);

    /**
     * 根据项目ID/用户/机构类型/状态查询劳务工数量
     *
     * @param projectId 项目ID
     * @param userName 用户
     * @param status 状态
     * @return 数量
     */
    int getStaffCountByProjectIdAndUser(Integer projectId, String userName, String status);

    /**
     * 新增
     * 
     * @param model 农民工花名册
     * @return 结果
     */
    int insert(SiteLabourStaff model);

    /**
     * 身份证上传
     *
     * @param cardFrontFile 身份证正面
     * @param cardBackFile 身份证背面
     * @param institutionCode 标段编号
     * @param front 身份证正面对象
     * @param back 身份证背面对象
     * @return 结果
     */
    AjaxResult cardUpload(MultipartFile cardFrontFile, MultipartFile cardBackFile, String institutionCode, CardFrontModel front, CardBackModel back);

    /**
     * 身份证zip上传
     *
     * @param institutionCode 标段编号
     * @param zipPath zip文件路径
     * @param tempPath 临时路径
     * @return 结果
     */
    AjaxResult cardZipUpload(String institutionCode, String zipPath, String tempPath);

    /**
     * excel批量导入劳务工基本信息
     *
     * @param list excel劳务工集合
     * @param institutionCode 标段编号
     * @return 结果
     */
    AjaxResult importBasicData(List<StaffBasicModel> list, String institutionCode);

    /**
     * 修改
     * 
     * @param model 农民工花名册
     * @return 结果
     */
    int update(SiteLabourStaff model);

    /**
     * 批量删除
     * 
     * @param ids 主键集合
     * @return 结果
     */
    int deleteByIds(Integer[] ids);

    /**
     * 删除
     * 
     * @param id 农民工花名册主键
     * @return 结果
     */
    int delete(Integer id);

    /**
     * 劳务工进场
     *
     * @param staffRecord 劳务工进场记录
     * @return 结果
     */
    int enter(SiteLabourStaffRecord staffRecord);

    /**
     * 劳务工退场
     *
     * @param staff 劳务工信息
     * @param staffRecord 劳务工进场记录
     * @return 结果
     */
    int exit(SiteLabourStaff staff, SiteLabourStaffRecord staffRecord);

    /**
     * 劳务工批量退场
     *
     * @param ids id数组
     * @param exitDate 退场日期
     * @return 结果
     */
    int batchExit(Integer[] ids, Date exitDate);

    /**
     * excel批量导入劳务工进场信息
     *
     * @param list excel劳务工进场集合
     * @param institutionCode 标段编号
     * @return 结果
     */
    AjaxResult importEnterData(List<StaffEnterModel> list, String institutionCode);

}
